﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO;
using BUS;

namespace QuanLyNhaSach.Employee
{
    public partial class FrmAccountList : DevComponents.DotNetBar.Office2007Form
    {
        BindingList<AccountDTO> _ListAcc;
        AccountBUS AccBUS;
        RuleObjectBUS RuleBUS;
        int rowIndex; //Biến lưu giá trị của dòng đang sửa hoặc vừa thêm mới

        public FrmAccountList()
        {
            InitializeComponent();
            _ListAcc = new BindingList<AccountDTO>();
            AccBUS = new AccountBUS();
            dtgAccountList.AutoGenerateColumns = false;
            RuleBUS = new RuleObjectBUS();
        }

        private void FrmAccountList_Load(object sender, EventArgs e)
        {
            this.VisibleChanged += new EventHandler(FrmAccountList_VisibleChanged);
            CheckPermission();
        }

        private void CheckPermission()
        {
            btnDel.Enabled = RuleBUS.CheckPermission(Global.GroupID, (int)RuleObject.ActionAuthor);
            btnUpdate.Enabled = btnDel.Enabled;
        }

        void FrmAccountList_VisibleChanged(object sender, EventArgs e)
        {
            _ListAcc = AccBUS.GetNewBindingList();
            dtgAccountList.DataSource = _ListAcc;
            Global.GenerateNumber(dtgAccountList, colNumber.Index);
            Global.GenerateEditColumn(dtgAccountList, colEdit.Index);
            Global.GenerateDeleteColumn(dtgAccountList, colDel.Index);
        }

        public void AccountAfterInsert(AccountDTO Acc)
        {
            _ListAcc.Add(Acc);

            rowIndex = dtgAccountList.Rows.GetLastRow(DataGridViewElementStates.None);
            dtgAccountList[colEdit.Index, rowIndex].Value = Properties.Resources.edit_16;
            dtgAccountList[colDel.Index, rowIndex].Value = Properties.Resources.deletered;

            if (rowIndex == 0)
            {
                dtgAccountList[colNumber.Index, rowIndex].Value = rowIndex + 1;
            }
            else
            {
                dtgAccountList[colNumber.Index, rowIndex].Value = Global.intParse( dtgAccountList[colNumber.Index, rowIndex - 1].Value) + 1;
            }
        }

        private void dtgAccountList_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                if (e.ColumnIndex == colEdit.Index)
                {
                    btnUpdate_Click(sender, e);
                }
                else if (e.ColumnIndex == colDel.Index)
                {
                    btnDel_Click(sender, e);
                }
            }            
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            if (!RuleBUS.CheckPermission(Global.GroupID, (int)RuleObject.ActionAccount))
            {
                Global.SetMessage(lblMessage, "Bạn không có quyền thực hiện thao tác này!", false);
                return;
            }

            if (dtgAccountList.CurrentRow.Index >= 0)
            {
                AccountDTO Acc = new AccountDTO();
                Acc.EmployeeID = Global.intParse(dtgAccountList.CurrentRow.Cells[colEmployeeID.Index].Value);

                Acc = AccBUS.GetAccountByID(Acc.EmployeeID);

                Employee.FrmAccountDetail frm = new FrmAccountDetail { Action = ActionName.Update, Account = Acc };
                frm.ShowDialog();
            }
        }

        private void btnDel_Click(object sender, EventArgs e)
        {
            if (dtgAccountList.CurrentRow.Index >= 0)
            {
                if (!RuleBUS.CheckPermission(Global.GroupID, (int)RuleObject. ActionAccount))
                {
                    Global.SetMessage(lblMessage, "Bạn không có quyền thực hiện thao tác này!", false);
                    return;
                }

                if (DevComponents.DotNetBar.MessageBoxEx.Show("Bạn muốn xóa tài khoản này ?", "Hỏi",MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    int id = Global.intParse(dtgAccountList.CurrentRow.Cells[colEmployeeID.Index].Value);

                    if (AccBUS.DeleteAccount(id))
                    {
                        Global.SetMessage(lblMessage, "Xóa tài khoản thành công!", true);
                        _ListAcc.Remove(_ListAcc.FirstOrDefault(l => l.EmployeeID == id));
                        Global.GenerateNumber(dtgAccountList, colNumber.Index);
                    }
                    else
                    {
                        Global.SetMessage(lblMessage, "Có lỗi trong quá trình làm việc!", false);
                    }
                }
            }
        }
    }
}
